头条聊天服务实现
在toutiao-backend/im目录中创建server.py
import socketio
# 创建sio对象
sio = socketio.Server(async_mode='eventlet')
app = socketio.Middleware(sio)
在toutiao-backend/im目录中创建im服务启动程序main.py
运行方式python main.py [端口]
,如python main.py 8000
import eventlet
eventlet.monkey_patch()
import eventlet.wsgi
import sys
# 获取命令行参数,目的是想让im服务运行的端口在启动程序时指定
if len(sys.argv) < 2:
print('Usage: python main.py [port]')
exit(1)
port = int(sys.argv[1])
from server import app
import notify
# socketio服务器运行的地址
SERVER_ADDRESS = ('', port)
# 启动socketio服务器
sock = eventlet.listen(SERVER_ADDRESS)
eventlet.wsgi.server(sock, app)
在toutiao-backend/im目录中创建chat.py
from server import sio
import time
@sio.on('connect')
def on_connect(sid, environ):
"""
与客户端建立好连接后被执行
"""
print('sid={}'.format(sid))
print('environ={}'.format(environ))
msg_data = {
'msg': 'hello',
'timestamp': round(time.time()*1000)
}
sio.emit('message', msg_data, room=sid)
@sio.on('message')
def on_message(sid, data):
"""
接收message事件消息时执行
"""
print('sid={} data={}'.format(sid, data))
msg_data = {
'msg': 'I have received your msg: {}'.format(data),
'timestamp': round(time.time()*1000)
}
sio.send(msg_data, room=sid)
# sio.emit('message', msg_data, room=sid)